package partThree;

import java.io.*;

/* 本类用于测试对象的序列化与反序列化
 *  序列化 ObjectOutputStream
 *  是指把程序中的java对象，通过序列化流oos输出到磁盘的文件中，相当于数据写出的过程
 * 反序列化  ObjectInputStream
 * 是指把之前已经保存在文件中的对象的相关数据，通过反序列化流ois读到内存中的过程中
 * 相当于数据读取的过程*/
public class TestSerializable{
    public static void main(String[] args) {
        method1(); //本方法用来完成序列化的功能
        method2(); //本方法用于完成反序列化功能
    }

    private static void method2() {
        //1.定义一个在本方法中都生效的局部变量，注意初始化
        ObjectInputStream in = null;
        //2.由于IO操作可能会产生异常，所以完成try-catch-finally结构
        try{
            //3.创建反序列化流ois
            in = new ObjectInputStream(new FileInputStream("D:\\ready\\1.txt"));
            //4.通过反序列化流，读取文件中的数据，并把读到的数据，回复成数据
            Object o = in.readObject();
            System.out.println(o); //将接到的对象打印
            System.out.println("恭喜您，反序列化成功！");
        }catch(Exception e){
            System.out.println("很抱歉，反序列化失败！");
            e.printStackTrace();
        }finally {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    private static void method1() {
        //定义一个在本方法中都生效的局部变量，注意初始化
        ObjectOutputStream out = null;
        try {
            //1.创建流对象--需要try-catch，需要设置FileOutputStream子类，
            // 并设置传输文件路径表明要把序列化后的对象数据输出到哪个文件中
            out = new ObjectOutputStream(new FileOutputStream("D:\\ready\\1.txt"));
            //2.使用流对象
            //2.1 指定一个要序列化输出的对象，并设置属性
            Student2 s = new Student2("海绵宝宝",3,"海里",'男');
            //2.2 序列化输出对象s到文件中
            out.writeObject(s);
            System.out.println("恭喜您，序列化成功！");
            //成功后，我们可以在目标文件里看到序列化输出的数据，但注意，这个数据是为了底层保存对象和传输使用的，我们看不懂
            //有些类似于我们字节码文件中的数据
        } catch (IOException e) {
            System.out.println("很抱歉，序列化失败！");
            e.printStackTrace();
        }finally {
            //3.关闭流对象
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}